import random

from django import http
from django.shortcuts import render
from django.views import View
from django_redis import get_redis_connection

import constants
from libs.aliyun.sms.sms import send_sms
from libs.captcha.captcha import captcha


class ImageCodeView(View):
    """图片验证码的后端逻辑"""

    def get(self, request, uuid):
        # 获取图片验证码
        # 生成一张图片验证码
        _, text, image = captcha.generate_captcha()

        # 连接redis 变量名为code
        redis_conn = get_redis_connection('code')
        # 在redis中存入的名字 保存的时间 验证码内容
        redis_conn.setex('img_%s' % uuid, constants.IMAGE_CODE_REDIS_EXPIRES, text)

        # 将图片返回给前端
        return http.HttpResponse(image, content_type='jpeg/image')


class SMSCodeView(View):
    """短信验证码"""

    def get(self, request, mobile):
        """
        :param reqeust: 请求对象
        :param mobile: 手机号
        :return: JSON
        """
        # 创建连接到redis的对象
        redis_conn = get_redis_connection('code')

        # 生成短信验证码：生成6位数验证码
        sms_code = '%06d' % random.randint(0, 999999)

        # 保存短信验证码
        redis_conn.setex('sms_%s' % mobile, constants.SMS_CODE_REDIS_EXPIRES, sms_code)
        # 为了在测试期间减少短信发送，可以屏蔽发送短信功能，使用打印的方式来获取到真正的验证码值
        # 发送短信验证码
        send_sms(mobile, sms_code)
        # tasks_send(mobile, sms_code)
        print(">>>>短信验证码>>>>>>", sms_code)

        # 响应结果
        return http.JsonResponse({'code': constants.OK, 'errmsg': '发送短信成功'})
